useradd node1
passwd node1
node@2024

su root
chmod 777 /etc/sudoers
vi /etc/sudoers
master    ALL=(ALL)ALL

yum install iproute-tc -y
yum install iproute

设置主机名
hostnamectl set-hostname node1
hostname node1

安装依赖
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git iproute lrzsz bash-completion tree bridgeutils unzip bind-utils gcc
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

调整内核参数

cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1        #开启bridge-nf，iptables对于网桥的操作生效
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1                   #启用ip转发功能
net.ipv4.tcp_tw_recycle=0               #禁用tcp加快超时回收
vm.swappiness=0             #禁止使用swap
vm.overcommit_memory=1          #物理内存是否需要检查，1表示不检查
vm.panic_on_oom=0           #0表示开启，内存溢出会触发OOM killer
fs.inotify.max_user_instances=8192    #每一个用户可创建的inotify instatnces的数量上限
fs.inotify.max_user_watches=1048576   #表示同一用户同时可以添加的watch数目
fs.file-max=52706963          #系统所有进程一共可以打开的文件数量
fs.nr_open=52706963           #单进程文件最大打开数量
net.ipv6.conf.all.disable_ipv6=1        #禁用整个系统所有接口的IPv6
net.netfilter.nf_conntrack_max=2310720  #iptables连接跟踪模块最大跟踪连接数
EOF

cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

调整系统时区

timedatectl set-timezone Asia/Shanghai
#将当前的 UTC 时间写入硬件时钟
timedatectl set-local-rtc 0
#重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond

关闭系统不需要的服务
systemctl stop postfix && systemctl disable postfix


设置系统日志服务
mkdir /var/log/journal
#2）.创建配置文件存放目录
mkdir /etc/systemd/journald.conf.d
#3）.创建配置文件
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
Storage=persistent        #日志数据持久化
Compress=yes          #日志文件是否需要压缩
SyncIntervalSec=5m      #向磁盘刷写日志文件的时间间隔
RateLimitInterval=30s   #限制日志的生成速率 (设为零表示不作限制)
RateLimitBurst=1000       #表示在RateLimitInterval时间段内， 每个服务最多允许产生的日志数量(条数)
SystemMaxUse=10G          #控制日志最大可使用多少磁盘空间
SystemMaxFileSize=200M    #限制单个日志文件的最大体积， 到达此限制后日志文件将会自动滚动。
MaxRetentionSec=2week     #日志文件的最大保留期限
ForwardToSyslog=no        #表示是否将接收到的日志消息转发给传统的 syslog 守护进程
EOF

#4）.重启systemd journald的配置
systemctl restart systemd-journald

调整单个进程能打开的最大文件数
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf

内核加载br_netfilter、ipvs模块
modprobe br_netfilter    #加载网桥防火墙模块

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- modprobe nf_conntrack
EOF
##使用lsmod命令查看这些文件是否被引导
chmod 755 /etc/sysconfig/modules/ipvs.modules && sh /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack


安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2

#设置yum源为阿里云，仓库配置会保存到/etc/yum.repos.d/docker-ce.repo文件中
yum-config-manager --add-repo http://mirrors.aliyun.com/docker‐ce/linux/centos/docker‐ce.repo

#更新Yum安装的相关Docke软件包&安装Docker CE（社区版）docker-ee（企业版）
yum update -y && yum install docker-ce-20.10.9

设置docker daemon文件
mkdir /etc/docker
#更新daemon.json文件
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": [
    "native.cgroupdriver=systemd"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ],
  "registry-mirrors" : [
    "https://ot2k4d59.mirror.aliyuncs.com/"
  ],
  "graph": "/data/docker"
}
EOF

#"json-file"：以json格式记录日志，max-size：日志文件最大大小
#注意： 一定注意编码问题，出现错误：查看命令：journalctl -amu docker 即可发现错误

#为 docker 服务创建一个 systemd 放置目录
mkdir -p /etc/systemd/system/docker.service.d

#3、重新加载 systemd 程序的配置文件、重启docker服务、设置开机启动
systemctl daemon-reload && systemctl restart docker && systemctl enable docker && systemctl status docker

安装kubeadm

设置阿里云仓库
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

nmcli c reload
systemctl restart NetworkManager.service

rm -rf $HOME/.kube   #删掉所有文件
yum -y remove kubelet
yum install -y kubeadm-1.23.6 kubelet-1.23.6 kubectl-1.23.6
# 启动 kubelet
systemctl enable kubelet && systemctl start kubelet && systemctl status kubelet


kubeadm init --apiserver-advertise-address=192.168.235.128  --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers  --kubernetes-version v1.23.6 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.244.0.0/16

kubeadm token list
kubeadm token create
kubeadm token create --print-join-command --ttl=0
kubeadm join 192.168.235.128:6443 --token x4gg1v.m3ittxu05ageonou --discovery-token-ca-cert-hash sha256:235cadf3f3b486f1c0746891c4386a9feb1c379b47a721be6fe02d970ffda6d9
a4497g.c4hko394zc9jxq3t
# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
235cadf3f3b486f1c0746891c4386a9feb1c379b47a721be6fe02d970ffda6d9

kubeadm join 192.168.235.128:6443 --token a4497g.c4hko394zc9jxq3t --discovery-token-ca-cert-hash sha256:235cadf3f3b486f1c0746891c4386a9feb1c379b47a721be6fe02d970ffda6d9
kubeadm join 192.168.235.128:6443 --token w8nhu9.coum3d9cbqxfeo7e --discovery-token-ca-cert-hash sha256:235cadf3f3b486f1c0746891c4386a9feb1c379b47a721be6fe02d970ffda6d9

安装网络
curl https://docs.projectcalico.org/manifests/calico.yaml -O
curl https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml -O
修改
name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"

grep image calico.yaml
sed -i 's#docker.io/##g' calico.yaml
kubectl apply -f calico.yaml

#重新执行生成文档：
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl cluster-info

master节点的 /etc/kubernetes/admin.conf 拷贝到其他需要运行的节点
scp /etc/kubernetes/admin.conf root@node2:/etc/kubernetes
scp /etc/kubernetes/admin.conf root@node3:/etc/kubernetes
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

#查看所有服务
kubectl get po -n kube-system
#查看所有节点
kubectl get node
查看各集群组件状态
kubectl get cs

kubectl describe po calico-node-qjvlt -n kube-system
kubectl describe po nginx-85b98978db-p7nvj -n kube-system